home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1996 #15 / Monster Media Number 15 (Monster Media)(July 1996).ISO / prog_c / cuj0696.zip / DWYER.ZIP / LIB / M77RAND.C < prev    next >
C/C++ Source or Header  |  1996-03-26  |  815b  |  35 lines

  1. #include <math.h>
  2. #include <stdlib.h>
  3. /* ================================================================== */
  4. /* M77_rand - Math77 Pseudo Random Number Generator (Short Algorithm) */
  5. /* ================================================================== */
  6. # undef    BASIC_SEED
  7. #define    BASIC_SEED    161803398
  8. static    long double  CurrentSeed = BASIC_SEED;
  9.  
  10. void    M77_rand_init(unsigned NewSeed)
  11. {
  12.     CurrentSeed = BASIC_SEED + NewSeed;
  13. }
  14.  
  15. double (dM77_rand) (void)
  16. {
  17. # undef    MDIV
  18. # undef    AFAC
  19. #define    MDIV    68719476503.0L
  20. #define AFAC    612662.L
  21.  
  22.     long double Prod;
  23.  
  24.     Prod = AFAC * CurrentSeed;
  25.  
  26.     CurrentSeed = fmodl(Prod, MDIV);
  27.  
  28.     return ((double)(CurrentSeed / MDIV));
  29. }
  30.  
  31. int (iM77_rand) (void)
  32. {
  33.     return ((unsigned) (dM77_rand() * ((double)RAND_MAX + 1.)) & RAND_MAX);
  34. }
  35.